<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>

    function Person (name, age) {
      this.name = name;
      this.age = age;
      this.say = function () {
        console.log("说话");
      }
    }
    // 变量提升
    var p = new Person('大漂亮', '100')
    console.log(p);
    // 声明
    // 构造函数的 原型对象, 声明的属性和方法是所有对象共享的
    Person.prototype.sex = '男'
    Person.prototype.study = function () {
      console.log('学习');
    }

    console.log(p);
    console.log(p.sex);
    p.study();

    var p2 = new Person('小漂亮', '10');
    console.log(p2);
    console.log(p2.sex);
    p2.study();
    p2.toString()

    console.log(Person.prototype);
    //查看 原型对象上声明 的 属性和方法, 在哪里
    // 对象 的 对象原型(__proto__)代码
    // 对象原型: 谷歌浏览器 [[Prototype]], 火狐浏览器<prototype>, IE __prototype__

    console.log(p.__proto__ === Person.prototype);

    // 构造函数
    console.log(Person.prototype.constructor);// 构造函数的原型对象的构造函数
    console.log(p2.__proto__.constructor);// 对象的对象原型的构造函数
    console.log(Person.prototype.constructor === p2.__proto__.constructor);

    p2.prototype.call
  </script>
</body>

</html>